package top.techqi.app.wol.utils

import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Environment
import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.text.SimpleDateFormat
import java.util.*

object ImageUtils {
    
    /**
     * 将Uri图片保存到应用私有目录
     * @param context 上下文
     * @param uri 图片Uri
     * @return 保存后的文件路径，失败返回null
     */
    fun saveImageToLocal(context: Context, uri: Uri): String? {
        return try {
            val inputStream: InputStream? = context.contentResolver.openInputStream(uri)
            inputStream?.use { stream ->
                val bitmap = BitmapFactory.decodeStream(stream)
                saveBitmapToLocal(context, bitmap)
            }
        } catch (e: Exception) {
            e.printStackTrace()
            null
        }
    }
    
    /**
     * 将Bitmap保存到应用私有目录
     * @param context 上下文
     * @param bitmap 要保存的Bitmap
     * @return 保存后的文件路径，失败返回null
     */
    fun saveBitmapToLocal(context: Context, bitmap: Bitmap): String? {
        return try {
            // 创建应用私有目录
            val imagesDir = File(context.filesDir, "images")
            if (!imagesDir.exists()) {
                imagesDir.mkdirs()
            }
            
            // 生成唯一文件名
            val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
            val fileName = "device_icon_$timestamp.jpg"
            val imageFile = File(imagesDir, fileName)
            
            // 保存图片
            val outputStream = FileOutputStream(imageFile)
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)
            outputStream.flush()
            outputStream.close()
            
            // 返回文件路径
            imageFile.absolutePath
        } catch (e: Exception) {
            e.printStackTrace()
            null
        }
    }
    
    /**
     * 从本地路径加载图片
     * @param imagePath 图片路径
     * @return Bitmap对象，失败返回null
     */
    fun loadImageFromLocal(imagePath: String?): Bitmap? {
        return try {
            if (imagePath.isNullOrEmpty()) return null
            val file = File(imagePath)
            if (file.exists()) {
                BitmapFactory.decodeFile(file.absolutePath)
            } else {
                null
            }
        } catch (e: Exception) {
            e.printStackTrace()
            null
        }
    }
    
    /**
     * 删除本地图片文件
     * @param imagePath 图片路径
     * @return 是否删除成功
     */
    fun deleteLocalImage(imagePath: String?): Boolean {
        return try {
            if (imagePath.isNullOrEmpty()) return false
            val file = File(imagePath)
            if (file.exists()) {
                file.delete()
            } else {
                true
            }
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    }
    
    /**
     * 清理过期的图片文件（可选功能）
     * @param context 上下文
     * @param maxAgeDays 最大保存天数，超过此天数的文件将被删除
     */
    fun cleanupOldImages(context: Context, maxAgeDays: Int = 30) {
        try {
            val imagesDir = File(context.filesDir, "images")
            if (!imagesDir.exists()) return
            
            val currentTime = System.currentTimeMillis()
            val maxAge = maxAgeDays * 24 * 60 * 60 * 1000L
            
            imagesDir.listFiles()?.forEach { file ->
                if (file.isFile && currentTime - file.lastModified() > maxAge) {
                    file.delete()
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
}
